[PR]

『新妻LOVELY×CATION』を応援しています!
水無瀬の部屋 > Programming > sample > tools > toolptrc.cpp
最終更新日: 2007/03/02

   1: //*********************************************************
   2: // プロジェクト: TOOLS
   3: //  ファイル名: toolptrc.cpp
   4: //*********************************************************
   5: #include <header/toolptrc.h>
   6: #include <header/tooldbg.h>
   7: #include <header/toolbase.h>        // 
   8: #include <header/toolwind.h>
   9: 
  10: 
  11: //---------------------------------------------------------
  12: // テスト関数 の 宣言
  13: //---------------------------------------------------------
  14: DECLARE_TESTPROC( test_ptrc );
  15: 
  16: 
  17: //*********************************************************
  18: // CopyPoint
  19: // 座標 ptSrc を座標 ptDst に複写する
  20: //*********************************************************
  21: bool
  22: CopyPoint
  23: 	(
  24: 		      POINT *ptDst,
  25: 		const POINT *ptSrc
  26: 	)
  27: {
  28: 	CALLONCE_TESTPROC( test_ptrc ); // [テスト]
  29: 
  30: 	// パラメタの仮定
  31: 	ASSERT( IsValidPtr( ptDst, sizeof( *ptDst ) ) );
  32: 	ASSERT( IsValidReadPtr( ptSrc, sizeof( *ptSrc ) ) );
  33: 	ASSERT( ptSrc != ptDst );
  34: 
  35: 	*ptDst = *ptSrc;
  36: 	ASSERT( IsEqualPoint( ptDst, ptSrc ) );
  37: 	return true;
  38: }//CopyPoint
  39: 
  40: //*********************************************************
  41: // IsEqualPoint
  42: // 2つの座標が等しければ真を返す
  43: //*********************************************************
  44: bool
  45: IsEqualPoint
  46: 	(
  47: 		const POINT *a,
  48: 		const POINT *b
  49: 	)
  50: {
  51: 	CALLONCE_TESTPROC( test_ptrc ); // [テスト]
  52: 
  53: 	// パラメタの仮定
  54: 	ASSERT( IsValidReadPtr( a, sizeof( *a ) ) );
  55: 	ASSERT( IsValidReadPtr( b, sizeof( *b ) ) );
  56: 	ASSERT( a != b );
  57: 
  58: 	return (a->y == b->y)
  59: 	    && (a->x == b->x);
  60: }//IsEqualPoint
  61: 
  62: //*********************************************************
  63: // MakePoint
  64: // 座標 pt を設定する
  65: // 成功すれば真さもなくば偽を返す
  66: //*********************************************************
  67: bool
  68: MakePoint
  69: 	(
  70: 		POINT *pt, 
  71: 		int    x,
  72: 		int    y 
  73: 	)
  74: {
  75: 	CALLONCE_TESTPROC( test_ptrc ); // [テスト]
  76: 
  77: 	// パラメタの仮定
  78: 	ASSERT( IsValidPtr( pt, sizeof( *pt ) ) );
  79: 
  80: 	pt->x = x;
  81: 	pt->y = y;
  82: 	return true;
  83: }//MakePoint
  84: 
  85: //*********************************************************
  86: // OffsetPoint
  87: // 指定された座標を指定されたオフセットだけ移動する
  88: //   x …… 座標を左に動かすときは負の値を指定する
  89: //   y …… 座標を上に動かすときは負の値を指定する
  90: //*********************************************************
  91: bool
  92: OffsetPoint
  93: 	(
  94: 		POINT *pt,
  95: 		int    x, 
  96: 		int    y
  97: 	)
  98: {
  99: 	CALLONCE_TESTPROC( test_ptrc ); // [テスト]
 100: 
 101: 	// パラメタの仮定
 102: 	// ASSERT( (0 != x) || (0 != y) ); // あまりに不便か?
 103: 	ASSERT( IsValidPtr( pt, sizeof( *pt ) ) );
 104: 
 105: 	pt->x += x;
 106: 	pt->y += y;
 107: 	return true;
 108: }//OffsetPoint
 109: 
 110: //*********************************************************
 111: // PointIntoRect
 112: // 座標 pt を矩形 rc 内に移動する
 113: //*********************************************************
 114: bool
 115: PointIntoRect
 116: 	(
 117: 		      POINT *pt,
 118: 		const RECT  *rc
 119: 	)
 120: {
 121: 	// パラメタの仮定
 122: 	ASSERT( IsValidRect( rc ) );
 123: 	ASSERT( IsValidPtr( pt, sizeof( *pt ) ) );
 124: 
 125: 	pt->x = max( rc->left, min(pt->x, rc->right-1)  );
 126: 	pt->y = max( rc->top,  min(pt->y, rc->bottom-1) );
 127: 	ASSERT( PtInRect( rc, *pt ) );
 128: 	return true;
 129: }//PointIntoRect
 130: 
 131: //*********************************************************
 132: // GetCenterPoint
 133: // 矩形 rc の中心 pt を得る
 134: //*********************************************************
 135: bool
 136: GetCenterPoint
 137: 	(
 138: 		      POINT *pt,
 139: 		const RECT  *rc
 140: 	)
 141: {
 142: 	// パラメタの仮定
 143: 	ASSERT( IsValidRect( rc ) );
 144: 	ASSERT( IsValidPtr( pt, sizeof( *pt ) ) );
 145: 	
 146: 	pt->x = (rc->left + rc->right ) / 2;
 147: 	pt->y = (rc->top  + rc->bottom) / 2;
 148: 	ASSERT( (rc->left <= pt->x) && (pt->x <= rc->right) );
 149: 	ASSERT( (rc->top  <= pt->y) && (pt->y <= rc->bottom) );
 150: 	return true;
 151: }//GetCenterPoint
 152: 
 153: //*********************************************************
 154: // GetRectHeight
 155: // 矩形 rc の高さを返す
 156: //*********************************************************
 157: int
 158: GetRectHeight
 159: 	(
 160: 		const RECT *rc
 161: 	)
 162: {
 163: 	// パラメタの仮定
 164: 	ASSERT( IsValidRect( rc ) );
 165: 
 166: 	return rc->bottom - rc->top;
 167: }//GetRectHeight
 168: 
 169: //*********************************************************
 170: // GetRectSize
 171: // 矩形 rc の大きさを返す
 172: //*********************************************************
 173: bool
 174: GetRectSize
 175: 	(
 176: 		const RECT *rc, 
 177: 		      SIZE *size
 178: 	)
 179: {
 180: 	// パラメタの仮定
 181: 	ASSERT( IsValidRect( rc ) );
 182: 	ASSERT( IsValidPtr( size, sizeof( *size ) ) );
 183: 
 184: 	size->cx = GetRectWidth(  rc );
 185: 	size->cy = GetRectHeight( rc );
 186: 	return true;
 187: }//GetRectSize
 188: 
 189: //*********************************************************
 190: // GetRectWidth
 191: // 矩形 rc の幅を返す
 192: //*********************************************************
 193: int
 194: GetRectWidth
 195: 	(
 196: 		const RECT *rc
 197: 	)
 198: {
 199: 	// パラメタの仮定
 200: 	ASSERT( IsValidRect( rc ) );
 201: 
 202: 	return rc->right - rc->left;
 203: }//GetRectWidth
 204: 
 205: //*********************************************************
 206: // IsValidRect
 207: // 矩形 rc が有効であれば真を返す
 208: // ・左辺が右辺よりも左側にあるか右辺に等しい
 209: // ・上辺が下辺よりも上側にあるか下辺に等しい
 210: //*********************************************************
 211: bool
 212: IsValidRect
 213: 	(
 214: 		const RECT *rc
 215: 	)
 216: {
 217: 	// パラメタの仮定
 218: 	ASSERT( IsValidReadPtr( rc, sizeof( *rc ) ) );
 219: 
 220: 	return (rc->top <= rc->bottom) && (rc->left <= rc->right);
 221: }//IsValidRect
 222: 
 223: //*********************************************************
 224: // MakeSizeRect
 225: // 左上隅座標 (x, y) で大きさ sz の矩形を得る
 226: //*********************************************************
 227: bool
 228: MakeSizeRect
 229: 	(
 230: 		      RECT *rc,
 231: 		      int   x,
 232: 		      int   y,
 233: 		const SIZE *sz
 234: 	)
 235: {
 236: 	// パラメタの仮定
 237: 	ASSERT( IsValidPtr( rc, sizeof( *rc ) ) );
 238: 	ASSERT( IsValidReadPtr( sz, sizeof( *sz ) ) );
 239: 
 240: 	VERIFY( SetRect( rc, x, y, x + sz->cx, y + sz->cy ) );
 241: 	ASSERT( IsValidRect( rc ) );
 242: 	return true;
 243: }//MakeSizeRect
 244: 
 245: //*********************************************************
 246: // PointOnRect
 247: //*********************************************************
 248: bool
 249: PointOnRect
 250: 	(
 251: 		const RECT  *rc,
 252: 		const POINT *pt
 253: 	)
 254: {
 255: 	// パラメタの仮定
 256: 	ASSERT( IsValidRect( rc ) );
 257: 	ASSERT( IsValidReadPtr( pt, sizeof( *pt ) ) );
 258: 
 259: 	return ( pt->x >= rc->left ) && ( pt->x <= rc->right )
 260: 	    && ( pt->y >= rc->top ) && ( pt->y <= rc->bottom );
 261: }//PointOnRect
 262: 
 263: //*********************************************************
 264: // ScaleRect
 265: // 各辺の長さが rcDst : rcSrc == n : m となる矩形 rcDst を得る
 266: //*********************************************************
 267: bool
 268: ScaleRect
 269: 	(
 270: 		      RECT *rcDst,
 271: 		const RECT *rcSrc,
 272: 		      int   n,
 273: 		      int   m
 274: 	)
 275: {
 276: 	// パラメタの仮定
 277: 	ASSERT( 0 < n );
 278: 	ASSERT( 0 < m );
 279: 	ASSERT( IsValidRect( rcSrc ) );
 280: 	ASSERT( IsValidPtr( rcDst, sizeof( *rcDst ) ) );
 281: //	ASSERT( rcSrc != rcDst );
 282: 
 283: 	POINT pt;
 284: 	VERIFY( GetCenterPoint( &pt, rcSrc ) );
 285: 	const int width  = GetRectWidth(  rcSrc );
 286: 	const int height = GetRectHeight( rcSrc );
 287: 	rcDst->left   = pt.x - ((n * width)  / (2 * m));
 288: 	rcDst->top    = pt.y - ((n * height) / (2 * m));
 289: 	rcDst->right  = pt.x + ((n * width)  / (2 * m));
 290: 	rcDst->bottom = pt.y + ((n * height) / (2 * m));
 291: 	ASSERT( IsValidRect( rcDst ) );
 292: 	return true;
 293: }//ScaleRect
 294: 
 295: 
 296: //******************************************************************************************************************
 297: // TEST
 298: //******************************************************************************************************************
 299: 
 300: 
 301: #ifdef _DEBUG // デバッグ時のみ
 302: 
 303: 
 304: //*********************************************************
 305: // test_ptrc()
 306: //*********************************************************
 307: DEFINE_TESTPROC( test_ptrc )
 308: {
 309: 	//---------------------------------------------------------
 310: 	// 定数 の テスト
 311: 	//---------------------------------------------------------
 312: 
 313: 	//---------------------------------------------------------
 314: 	// ファイルスコープ関数 の テスト
 315: 	//---------------------------------------------------------
 316: 
 317: 	//---------------------------------------------------------
 318: 	// 公開関数 の テスト
 319: 	//---------------------------------------------------------
 320: 
 321: 	
 322: 	// PointSet
 323: 	// IsEqualPoint
 324: 	// CopyPoint
 325: 	// OffsetPoint
 326: 	{
 327: 		POINT ptA, ptB, ptC;
 328: 		VERIFY(  MakePoint( &ptA, 0, 0 ) );
 329: 		VERIFY(  0 == ptA.x );
 330: 		VERIFY(  0 == ptA.y );
 331: 		VERIFY(  MakePoint( &ptB, 1, -1 ) );
 332: 		VERIFY(  1 == ptB.x );
 333: 		VERIFY( -1 == ptB.y );
 334: 		VERIFY(  MakePoint( &ptC, -1, 1 ) );
 335: 		VERIFY( -1 == ptC.x );
 336: 		VERIFY(  1 == ptC.y );
 337: 		VERIFY( !IsEqualPoint( &ptA, &ptB ) );
 338: 		VERIFY( !IsEqualPoint( &ptA, &ptC ) );
 339: 		VERIFY( !IsEqualPoint( &ptB, &ptC ) );
 340: 		VERIFY(  CopyPoint( &ptB, &ptC ) );
 341: 		VERIFY(  IsEqualPoint( &ptB, &ptC ) );
 342: 		VERIFY( -1 == ptB.x );
 343: 		VERIFY(  1 == ptB.y );
 344: 		VERIFY(  OffsetPoint( &ptB, -1, 1 ) );
 345: 		VERIFY( -2 == ptB.x );
 346: 		VERIFY(  2 == ptB.y );
 347: 		VERIFY(  OffsetPoint( &ptB, 2, -2 ) );
 348: 		VERIFY(  0 == ptB.x );
 349: 		VERIFY(  0 == ptB.y );
 350: 		VERIFY(  IsEqualPoint( &ptB, &ptA ) );
 351: 	}
 352: 
 353: }//test_ptrc
 354: 
 355: 
 356: #endif // #ifdef _DEBUG
 357: 
 358: 
 359: //** end **
 360: 

参照:


Google
ご意見・ご感想をお聞かせ下さい。匿名で送信できます。

 * 返信が必要な場合には postmaster@katsura-kotonoha.sakura.ne.jp へ直接メールしてください。

水無瀬の部屋 > sample > tools > toolptrc.cpp

このページは cpp2web が出力しました。
水無瀬 優 postmaster@katsura-kotonoha.sakura.ne.jp
http://katsura-kotonoha.sakura.ne.jp/prog/code/tools/toolptrc_cpp.shtml
『新妻LOVELY×CATION』を応援しています!